Passed
Pull Request — master (#19)
by Muhammad Dyas
01:36
created

TaskHandler   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 12
eloc 40
dl 0
loc 48
rs 10
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
B getStateFromMessageId 0 16 7
B process 0 23 5
1
import {PollState, taskEvent} from '../helpers/interfaces';
2
import {callMessageApi} from '../helpers/api';
3
import {getStateFromCardName} from '../helpers/state';
4
import PollCard from '../cards/PollCard';
5
6
export default class TaskHandler {
7
  event: taskEvent;
8
9
  public constructor(event: taskEvent) {
10
    this.event = event;
11
  }
12
13
  async process() {
14
    switch (this.event.action) {
15
      case 'close_poll':
16
        const currentState = await this.getStateFromMessageId();
17
        if (!currentState.closedTime || currentState.closedTime > Date.now()) {
18
          currentState.closedTime = Date.now();
19
        }
20
        const cardMessage = new PollCard(currentState).createMessage();
21
        const request = {
22
          name: this.event.id,
23
          requestBody: cardMessage,
24
          updateMask: 'cardsV2',
25
        };
26
        const apiResponse = await callMessageApi('update', request);
27
        if (apiResponse?.status === 200) {
28
          console.log('message is closed by autoclose system');
29
        } else {
30
          console.log('message is closed by autoclose system');
31
          throw new Error('Error when closing message');
32
        }
33
      default:
34
        return {};
35
    }
36
  }
37
38
  async getStateFromMessageId(): Promise<PollState> {
39
    const request = {
40
      name: this.event.id,
41
    };
42
    const apiResponse = await callMessageApi('get', request);
43
    console.log('task getting message', JSON.stringify(apiResponse));
44
    if (apiResponse) {
45
      const currentState = getStateFromCardName(apiResponse.data?.cardsV2?.[0].card ?? {});
46
      console.log('task getting state', JSON.stringify(currentState));
47
      if (!currentState) {
48
        throw new Error('State not found');
49
      }
50
      return JSON.parse(currentState) as PollState;
51
    } else {
52
      throw new Error('Error when getting message detail');
53
    }
54
  }
55
}
56